Casting zwischen Strukturen

In Nicht-Unicode-Systemen kann man eine beliebige Struktur füllen und diese dann in ein Character-Feld schieben. Bei Unicode-Systemen geht’s nicht mehr so einfach; hier müssen die verschiedenen Strukturen per Assign “gecastet” werden. Danach können sie zugewiesen werden.

Sobald ein nicht-Zeichenartiges Feld in der Quellstruktur vorkommt, kann die Zuweisung in einem Unicode-System nicht über einen normalen MOVE bewerkstelligt werden. Hier meckert der Compiler: ” “Quellstruktur” und “Zielstruktur” sind in einem Unicode-Programm nicht ineinander konvertierbar”

Macht man dasselbe über einen ungecasteteten ASSIGN, so erhält man den Kurzdump “UC_OBJECTS_NOT_CONVERTIBLE”.

Besteht die Struktur aus reinen CHAR- oder NUMC-Feldern, kann die Zuweisung so erfolgen:

LV_FELD = LS_DATA.

Das folgende Coding zeigt die Lösung, wenn auch andere Typen verwendet werden.

Coding mit definierter Struktur

*** Type der eigenen Struktur
TYPES:
  BEGIN OF ty_data,
    feld1(10)  TYPE c,
    feld2(5)   TYPE n,
    feld3      TYPE i,
    feld4(6)   TYPE p DECIMALS 3,
 END OF ty_data.

DATA:
*** Eigene Struktur
 ls_data TYPE ty_data,
*** Feld, in das die Daten geschoben werden sollen:
 lv_feld TYPE c LENGTH 100.

*** Erforderliche Feldsymbole
FIELD-SYMBOLS:
  <x1>    TYPE ty_data.

*** Programmstart
START-OF-SELECTION.

*** Testdaten füllen
  ls_data-feld1 = ‘ABCDEFGHIJ’.
  ls_data-feld2 = ‘12345’.
  ls_data-feld3 = 123.
  ls_data-feld4 = ‘9876.543’.

*** Zielfeld löschen
  CLEAR lv_feld.

*** Casting durchführen
  ASSIGN lv_feld     TO <x1> CASTING.
*** Zuweisung über gecastete Strukturen
  <x1> = ls_Data.

*** Test Ausgabe
  WRITE: / ‘Ergebnis:’, lv_feld.

Enno Wulff

Leave a Comment